home *** CD-ROM | disk | FTP | other *** search
/ Aminet 51 / Aminet 51 (2002)(GTI - Schatztruhe)[!][Oct 2002].iso / Aminet / gfx / fract / FlashMandelWOS.lha / FlashMandel / Developer / Modules / FixedMath / Julian68K_Fixed.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-08-05  |  1.4 KB  |  65 lines

  1. #include <exec/types.h>
  2. #include <proto/utility.h>
  3. #include <math.h>
  4. #include <i64.h>
  5. #include <flashmandel.h>
  6.  
  7. // fixed point math 6.58
  8. #define INTEGER_BITS 6L
  9. #define FLOAT_BITS   58L
  10. #define H_FLOAT_BITS (FLOAT_BITS / 2)
  11.  
  12. #define KMULT (1L << H_FLOAT_BITS)
  13.  
  14. #ifdef FIXEDPOINT_MATH
  15.  
  16. WORD Julian68K_Fixed (ULONG Iterazioni,ULONG Power,LDouble Cre,LDouble Cim,LDouble JKre,LDouble JKim)
  17. {                                                        
  18. register WORD Exp;
  19. FIXED_64 zr,zi,zr2,zi2,jkre,jkim,tmp;
  20. FIXED_64 maxdist;
  21.  
  22. tmp = i64_uset (4L);
  23. maxdist = i64_lshift (tmp,FLOAT_BITS);
  24.  
  25. tmp = i64_uset (KMULT);
  26. zr = i64_set ((LONG) (Cre * KMULT));
  27. zi = i64_set ((LONG) (Cim * KMULT));
  28. jkre = i64_set ((LONG) (JKre * KMULT));
  29. jkim = i64_set ((LONG) (JKim * KMULT));
  30.  
  31. zr = i64_mul (zr,tmp);
  32. zi = i64_mul (zi,tmp);
  33. jkre = i64_mul (jkre,tmp);
  34. jkim = i64_mul (jkim,tmp);
  35.  
  36.   do {
  37.        for (Exp = Power; Exp != -1; Exp--)
  38.        {
  39.            zi = i64_urshift (zi,H_FLOAT_BITS);
  40.  
  41.            zr = i64_urshift (zr,H_FLOAT_BITS);
  42.  
  43.            zi2 = i64_mul (zi,zi);
  44.  
  45.            zi = i64_mul (zr,zi);
  46.  
  47.            zr2 = i64_mul (zr,zr);
  48.  
  49.            zr = i64_sub (zr2,zi2);
  50.  
  51.            zi = i64_add (zi,zi);
  52.        }
  53.  
  54.        if (i64_cmp (i64_add (zr2,zi2),maxdist) == I64_GREATER ) return Iterazioni;
  55.  
  56.        zi = i64_add (zi,jkim);
  57.  
  58.        zr = i64_add (zr,jkre);
  59.  
  60.      } while (--Iterazioni != -1);
  61.  
  62.   return 0;
  63. }
  64. #endif
  65.